Skip to main content

Creating a new ingress rule

Since setting up ingress rules is a common operation, provide detailed instructions on how to define and apply these rules to route external traffic to the appropriate services within your Kubernetes cluster. This should include examples and best practices. ​Kubernetes

Prerequisites

A running Kubernetes cluster kubectl installed and configured NGINX Ingress Controller installed If not installed, you can install it quickly with:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml 

Step-by-Step: Creating a New Ingress Rule

1. Create a Sample Application (Deployment + Service)

Let’s create a simple Hello World app that responds on port 80:

# hello-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 2
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: hashicorp/http-echo
args:
- "-text=Hello, Kubernetes!"
ports:
- containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
selector:
app: hello-world
ports:
- protocol: TCP
port: 80
targetPort: 5678

Apply it:

kubectl apply -f hello-deployment.yaml

2. Create an Ingress Resource

Now let’s expose this service using an Ingress rule.

# hello-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: hello.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello-world
port:
number: 80

Apply it:

kubectl apply -f hello-ingress.yaml

3. Test It

Add a line to your /etc/hosts (on your local machine):

127.0.0.1 hello.local 

Then use curl on your browser:

curl http://hello.local # Output: Hello, Kubernetes!